package org.wangchaocheng.cloudgallery.user.gateway;

import java.util.List;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.wangchaocheng.cloudgallery.dto.common.PageDTO;
import org.wangchaocheng.cloudgallery.dto.user.RoleDTO;
import org.wangchaocheng.cloudgallery.query.user.RolePageQry;

/**
 * @author wangchaocheng
 * @date 2025-03-01 10:30:19
 */
public interface RoleGateway {

    /**
     * 保存角色, 存在则更新
     * @param roleDTO 角色信息
     */
    void save(RoleDTO roleDTO);

    /**
     * 根据指定列列查询角色
     * @param column 列
     * @param value 值
     *
     * @return {@link RoleDTO}
     * @param <T> 值类型
     */
    <T> RoleDTO findByColumn(SFunction<RoleDTO, ?> column, T value);

    /**
     * 根据指定列查询角色是否存在
     * @param column 列
     * @param value 值
     * @return {@link Boolean}
     * @param <T> 值类型
     */
    <T> Boolean existByColumn(SFunction<RoleDTO, ?> column, T value);

    /**
     * 查询所有可用角色
     * @return {@link Page}<{@link RoleDTO}>
     */
    List<RoleDTO> listAllEnableRole();

    /**
     * 根据角色Id列表查询角色
     * @param roleIdList 用户ID
     * @return {@link List}<{@link RoleDTO}>
     */
    List<RoleDTO> listByRoleIds(List<Long> roleIdList);

    /**
     * 分页查询角色
     * @param qry 查询参数
     * @return {@link Page}<{@link RoleDTO}>
     */
    PageDTO<RoleDTO> listPage(RolePageQry qry);

}
